package day240109

import (
	"fmt"
	"strconv"
)

// 类型转换
func A1() {

	/*
		:= 和 = 的区别
		:= 只能用于函数体内，不能用于函数外
		= 可以用于函数外，函数体内也可以
		= 需要显式指定变量的类型，而 := 可以自动推导变量的类型。

		  var a1 int = 10		//A 初始化
		  a2 := 10				//B 初始化
		  A B 在函数内，是等效的
	*/

	// int 转 string
	c := 22
	b := strconv.Itoa(c) //c  int类型转 string
	fmt.Println(b)
	fmt.Printf("%T", b) //输出b类型

	// string 转 float
	d := "1.5"
	e, _ := strconv.ParseFloat(d, 64)
	fmt.Println(e)
	fmt.Printf("%T", e)
	fmt.Println("--")
	//float 转 string
	/*
		第一个参数：浮点型变量
		第二个参数：
		'f'(-ddd,dddd)
		'b'(-dddp±ddd,指数为二进制)
		'e'(-d.dddde±dd,十进制指数)
		'E'(-d.ddddE±dd,十进制指数)
		'g'(指数很大时用'e'格式，否则'f'格式)
		'G'(指数很大时用'E'格式，否则'f'格式)
		第三个参数：小数点精度
		第四个参数：浮点型变量类型，64表示float64,32表示float32
	*/
	f := 3.5
	s := strconv.FormatFloat(f, 'f', 3, 64)
	fmt.Println(s)
	fmt.Printf("%T", s)

}

func A2() {

	//类型转换
	var f float64 = 1
	var fi float64 = 3
	var i int = 2
	fmt.Println(f, i)
	fi = float64(i)
	fmt.Println("float64转int", fi, i) //2 2

	var a, b int = 3, 2
	var c, d float64 = 3, 2

	fmt.Println("int 3/2=", a/b)     //1
	fmt.Println("float64 3/2=", c/d) //1.5

}
